package com.treasure.mall.biz.remote.live;

import com.treasure.mall.biz.dto.common.ChatMessageBodyDTO;
import com.treasure.mall.biz.entity.live.LiveRoomPO;
import com.treasure.mall.biz.entity.user.UserPO;
import com.treasure.mall.biz.remote.live.dto.*;
import com.treasure.mall.biz.remote.live.enums.MessageType;

import java.util.Map;

/**
 *
 * +---------------------------------------------------------
 * * @package: com.treasure.mall.biz.service.core.live
 * * @author: guomw (guomwchen@foxmail.com)
 * * @date: 2020/6/11 21:40
 * * @since: V1.0.0
 * +---------------------------------------------------------
 * 注意：本内容仅限于内部传阅，禁止外泄以及用于其他的商业目的
 * Copyright 2019-2022 com.treasure.mall.biz.service.core.live Inc. All rights reserved.
 */
public interface TencentIMService {

    /**
     * 符合当前客户端所需端登录内容
     *
     * @param user
     * @param userKey 如果用户没有登录，则使用该值生成用户Id签名
     * @return
     */
    Map<String, String> clientLoginInformation(UserPO user, String userKey);

    /**
     * 群组信息
     *
     * @param room
     * @return
     */
    String clientRoom(LiveRoomPO room);

    /**
     * 创建直播群组
     *
     * @param groupId   群组ID
     * @param groupName 群组名称
     * @return
     */
    String createGroup(String groupId, String groupName);

    /**
     * 直播状态通知消息
     *
     * @param dto
     */
    void sendLiveStateChangeMessage(LiveStateMessageDTO dto);

    void sendGeneralMessage(GeneralMessageDTO dto);

    /**
     * 发送禁言消息
     *
     * @param sessionId
     * @param userId
     * @param messageType
     */
    void sendForbidMessage(String sessionId, Long userId, MessageType messageType);

    void sendMessage(GeneralMessageDTO dto, MessageType messageType);

    /**
     * 发送聊天消息
     *
     * @param dto
     */
    void sendChatMessage(ChatMessageBodyDTO dto);

    /**
     * 发送支付成功消息
     *
     * @param dto
     */
    void sendPayedSuccess(PayedSuccessMessageDTO dto);

    /**
     * 发送拍卖成功消息
     *
     * @param dto
     */
    void sendAuctionSuccess(AuctionSuccessMessageDTO dto);

    /**
     * 发送开拍通知
     *
     * @param dto
     */
    void sendStartAuctionMessage(AuctionStartMessageDTO dto);

    /**
     * 发送流拍通知
     *
     * @param dto
     */
    void sendStopAuctionMessage(AuctionStartMessageDTO dto);

    void sendShareSuccess(ShareSuccessMessageDTO dto);

    /**
     * 发送指定商品消息
     *
     * @param dto
     */
    void sendGoodsTarget(GoodsTargetMessageDTO dto);

    /**
     * 加入直播间消息
     *
     * @param dto
     */
    void join(JoinMessageDTO dto);

    /**
     * 修改直播间观看人数消息（活跃度）
     *
     * @param roomId
     * @param memberNum
     */
    void modifyMemberNum(Long roomId, Integer memberNum);

    /**
     * 发布直播间红包消息 上架或下架
     *
     * @param dto
     */
    void sendRedPacketMessage(RedPacketMessageDTO dto);

    /**
     * 解除群组
     *
     * @param groupId
     */
    void destroyGroup(String groupId);
}
